ssssggggiiiiddddllllaaaadddddddd is a facility for dynamically loading shared objects. Unlike
ddddllllooooppppeeeennnn(3)(without RRRRTTTTLLLLDDDD____GGGGLLLLOOOOBBBBAAAALLLL), the shared object loaded (and all it's
dependent shared objects), are added to the list of shared objects just
as if they had been specified at the time the program had been linked, or
as if the _RLD_LIST (see rrrrlllldddd(1)) envariable had been used. That is to
say, all the names in the shared object become available to satisfy
references in shared objects during lazy text resolution (the DSOs are
globally visible: see also ddddllllooooppppeeeennnn "NAMESPACE ISSUES").
_m_o_d_e may be any one of RRRRTTTTLLLLDDDD____LLLLAAAAZZZZYYYY, RRRRTTTTLLLLDDDD____NNNNOOOOWWWW, or RRRRTTTTLLLLDDDD____NNNNOOOOWWWW____RRRREEEEPPPPOOOORRRRTTTT____EEEERRRRRRRROOOORRRR.
The mode RRRRTTTTLLLLDDDD____NNNNOOOOWWWW does exactly the same thing as RRRRTTTTLLLLDDDD____LLLLAAAAZZZZYYYY. When the
mode is specified as RRRRTTTTLLLLDDDD____LLLLAAAAZZZZYYYY or RRRRTTTTLLLLDDDD____NNNNOOOOWWWW, resolution of all symbols is
performed, so that references which were previously unbound or bound to
weak symbols can be rebound to strong symbols. However, unresolvable
references (a reference to a symbol which does not exist in any shared
object or in the mainline) to functions are left dangling for further
"lazy" resolution, pending another call to ssssggggiiiiddddllllaaaadddddddd perhaps.
When the mode is specified as RRRRTTTTLLLLDDDD____NNNNOOOOWWWW____RRRREEEEPPPPOOOORRRRTTTT____EEEERRRRRRRROOOORRRR resolution of all
symbols is performed, and any unresolvable reference results in an error
return from ssssggggiiiiddddllllaaaadddddddd. In this case, it is very dangerous to continue
execution, since resolution was not completed. The main use for this
function is to ensure that at the point of the ssssggggiiiiddddllllaaaadddddddd, all symbols have
now been resolved. This is useful for verifying completeness of
interfaces.
As with ddddllllooooppppeeeennnn, a handle to the added object is returned, and this handle
may be used to obtain addresses of specific symbols within the added
object. This is somewhat less useful than with ddddllllooooppppeeeennnn(without
RTLD_GLOBAL), since in the case of ssssggggiiiiddddllllaaaadddddddd rrrrlllldddd can resolve these symbols
directly (as can ddddllllooooppppeeeennnn with RTLD_GLOBAL).
ssssggggiiiiddddllllaaaadddddddd is available in a library which is loaded if the option ----llllcccc is
1) the directory specified by _p_a_t_h_n_a_m_e if it is not a simple file name
(_i._e. it contains a //// character). In this case, the exact file is the
only placed searched; steps two through four below are ignored.
2) any path specified via the ----rrrrppppaaaatttthhhh argument to lllldddd(1) when the
executable was statically linked.
3) any directory specified by the environment variable LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYY____PPPPAAAATTTTHHHH.
This environment variable should contain a colon-separated list of
directories, in the same format as the PPPPAAAATTTTHHHH variable [see sssshhhh(1)]. 64-bit
programs examine the variable LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYY66664444____PPPPAAAATTTTHHHH and if it is not set
examine LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYY____PPPPAAAATTTTHHHH. New 32-bit ABI programs examine the variable
LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYYNNNN33332222____PPPPAAAATTTTHHHH and if it is not set examine LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYY____PPPPAAAATTTTHHHH to
determine if an ABI-specific path has been specified.
All three of these variables are ignored if the process is running sssseeeettttuuuuiiiidddd
or sssseeeettttggggiiiidddd [see eeeexxxxeeeecccc(2)].
4) the default search paths are used. These are ////uuuussssrrrr////lllliiiibbbb::::////lllliiiibbbb for 32-bit
programs, ////uuuussssrrrr////lllliiiibbbb66664444::::////lllliiiibbbb66664444 for 64-bit programs, and ////uuuussssrrrr////lllliiiibbbb33332222::::////lllliiiibbbb33332222
for new 32-bit ABI programs.
The variable ____RRRRLLLLDDDD____RRRROOOOOOOOTTTT has its usual effect, as documented in the manpage
for rrrrlllldddd(1) (which means that for a sssseeeettttuuuuiiiidddd or sssseeeettttggggiiiidddd program _RLD_ROOT is
ignored).
Objects whose names resolve to the same absolute or relative path name
may be opened any number of times using ssssggggiiiiddddllllaaaadddddddd, however, the object
referenced is only loaded once into the address space of the current
process. The same object referenced by two different path names,
however, may be loaded multiple times. For example, given the object
////uuuussssrrrr////hhhhoooommmmeeee////mmmmeeee////mmmmyyyylllliiiibbbbssss////mmmmyyyylllliiiibbbb....ssssoooo, and assuming the current working directory
is ////uuuussssrrrr////hhhhoooommmmeeee////mmmmeeee////wwwwoooorrrrkkkkddddiiiirrrr,